package com.baselib.libnetwork.net.policy;

import com.baselib.libnetwork.net.base.Callback;
import com.baselib.libnetwork.net.model.ResultResponse;

/**
 * @author lixuce
 * @version v1.0
 * @description
 * @since 2017/10/29
 */

public interface HttpPolicy<T> {


    /**
     * 获取数据成功的回调
     *
     * @param success 获取的数据，可是是缓存或者网络
     */
    void onSuccess(ResultResponse<T> success);

    /**
     * 获取数据成功的回调
     *
     * @param success 获取的数据，可是是缓存或者网络
     */
    void onDownloadSuccess(T success);

    /**
     * 获取数据失败的回调
     *
     * @param error 失败的信息，可是是缓存或者网络
     */
    void onException(ResultResponse<T> error);

    /**
     * 构建请求对象,如果要用其他的可以寫類似的
     *
     * @return 准备请求的对象
     */
    okhttp3.Call prepareRawCall() throws Throwable;

    /**
     * 异步请求获取数据
     *
     * @param callback 异步回调
     */
    void requestAsync(Callback<T> callback);

    /**
     * 同步请求获取数据
     */
    ResultResponse<T> requestSync();

    /**
     * 取消请求
     */
    void cancel();

    /**
     * 是否已经取消
     *
     * @return true，已经取消，false，没有取消
     */
    boolean isCanceled();


}
